package com.zudada.servermain.controller.portmanage;

import com.zudada.servermain.POJO.DTO.PortUserDTO;
import com.zudada.servermain.POJO.DTO.PortUserPageQueryDTO;
import com.zudada.servermain.POJO.VO.PageResult;
import com.zudada.servermain.POJO.enums.Result;
import com.zudada.servermain.Service.PortUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
 * 港口人员管理Controller
 *
 * @author system
 */
@Slf4j
@RestController
@Api(tags = "港口人员相关接口")
@RequestMapping("/portmanage/portUser")
public class PortUserController {

    //TODO AOP 切面统一日志  问题：Controller 层每个方法都有日志代码 建议：创建 AOP 切面统一处理日志和性能监控  效果：减少代码重复，统一日志格式

    // TODO 缓存优化 问题：统计查询接口没有缓存，频繁查询数据库 建议：为查询接口添加 Redis 缓存 效果：减少数据库压力，提高响应速度



    @Autowired
    private PortUserService portUserService;

    /**
     * 新增港口人员
     *
     * @param portUserDTO 港口人员信息
     * @return Result<String> 操作结果
     */
    @PostMapping
    @ApiOperation("新增港口人员")
    public Result<String> save(@Valid @RequestBody PortUserDTO portUserDTO) {
        log.info("新增港口人员：{}", portUserDTO);
        portUserService.save(portUserDTO);
        return Result.success();
    }

    /**
     * 删除港口人员
     *
     * @param userId 用户ID
     * @return Result<String> 操作结果
     */
    @DeleteMapping
    @ApiOperation("删除港口人员")
    public Result<String> deleteById(@RequestParam("userId") String userId) {
        log.info("删除港口人员：{}", userId);
        portUserService.deleteByUserId(userId);
        return Result.success();
    }

    /**
     * 港口人员分页查询
     *
     * @param portUserPageQueryDTO 分页查询条件
     * @return Result<PageResult> 分页结果
     */
    @GetMapping("/page")
    @ApiOperation("港口人员分页查询")
    public Result<PageResult> page(@Valid PortUserPageQueryDTO portUserPageQueryDTO) {
        log.info("分页查询：{}", portUserPageQueryDTO);
        PageResult pageResult = portUserService.userPageQuery(portUserPageQueryDTO);
        return Result.success(pageResult);
    }

    /**
     * 修改港口人员
     *
     * @param portUserDTO 港口人员信息
     * @return Result<String> 操作结果
     */
    @PutMapping
    @ApiOperation("修改港口人员")
    public Result<String> update(@Valid @RequestBody PortUserDTO portUserDTO) {
        log.info("修改港口人员：{}", portUserDTO);
        portUserService.userUpdate(portUserDTO);
        return Result.success();
    }
}
